var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

//创建express服务器
var app = express();
//连接数据库
require('./utils/connect')

//设置EJS模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

//一系列的中间件（中间件是有顺序要求的）
//日志中间件
app.use(logger('dev'));
//用于把get请求中的查询字符串转化成json数据，方便使用
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
//用于把http会话中的cookie信息进行解析，方便使用
app.use(cookieParser());
//设置静态资源服务
app.use(express.static(path.join(__dirname, 'public')));

//设置动态资源服务
app.use('/', require('./routes/index'));
app.use('/api/v1/user', require('./routes/users'));
app.use('/api/v1/good', require('./routes/good'))
app.use('/api/v1/upload', require('./routes/upload'))

// 设置404处理器，当客户端访问的资源不存在时，给404
app.use(function(req, res, next   ) {
  next(createError(404));
});

// 设置500处理器，当后端业务逻辑报错，给500
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
